package com.util;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class FileUtil {
    /**
     * 读取指定路径的文件，并将每行作为一个元素放入List中返回。
     *
     * @param filePath 文件的路径。
     * @return 包含文件每一行内容的列表。
     */
    public static List<String> readFileToList(String filePath) {
        return readFileToList(filePath, "");
    }
    public static List<String> readFileToList(String filePath, String prefixStr) {
        // 使用Paths获取Path对象
        Path path = Paths.get(filePath);
        List<String> linesWithPrefix = new ArrayList<>();

        try {
            // 使用Files读取所有行
            List<String> lines = Files.readAllLines(path);

            // 使用Stream API为每行添加前缀
            linesWithPrefix = lines.stream()
                    .map(line -> prefixStr + line) // 在每行前面加上前缀
                    .collect(Collectors.toList());
        } catch (IOException e) {
            // 捕获IO异常并处理
            e.printStackTrace();
            System.err.println("发生错误：" + e.getMessage());
        }
        return linesWithPrefix;
    }

    /**
     * @param resourceFileName 传入的直接是resource文件目录下的路径以及名称
     * @return 返回这个文件的byte数组
     */
    public static byte[] getResourceFileByte(String resourceFileName) {
        InputStream inputStream = FileUtil.class.getClassLoader().getResourceAsStream(resourceFileName);
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        try {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                byteArrayOutputStream.write(buffer, 0, bytesRead);
            }
            return byteArrayOutputStream.toByteArray();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        } finally {
            try {
                inputStream.close();
                byteArrayOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
